// 2025/11/5
// 接雨水

class Solution {
public:
    int trap(vector<int>& height) {
        int n = height.size();
        vector<int> left_max(n), right_max(n);
        for(int i = 1; i < n; i++)
        {
            left_max[i] = max(height[i - 1], left_max[i - 1]);
        }
        for(int i = n - 2; i >= 0; i--)
        {
            right_max[i] = max(height[i + 1], right_max[i + 1]);
        }

        int ans = 0;
        for(int i = 1; i < n - 1; i++)
        {
            ans += max(0, min(left_max[i], right_max[i]) - height[i]);
        }
        return ans;
    }
};